#ifndef KLIENT_H
#define KLIENT_H

#include <boost/asio.hpp>
#include "klienttcp.hpp"
#include "ramka.hpp"
//#include "obiektobserwowalny.h"
//#include "obserwator.h"
#include <cliext\list>
#include <cliext\vector>
#include "oknoglowne.h"



ref class OknoGlowne;

ref class Klient {
   public:
   Klient(OknoGlowne^);
   ~Klient();
   void polacz(std::string, std::string);
   void wyslij(std::string);
   void zaloguj(std::string, std::string);
   void zamknij();
   
   cliext::map<System::String^,System::String^> pobierzObiekt();
   cliext::map<System::String^,System::String^> pobierzRegulator();
   cliext::vector<System::String^> pobierzGeneratory();
   cliext::map<System::String^,int> pobierzMapeRegulatorow();
   cliext::map<System::String^,int> pobierzMapeGeneratorow();
   cliext::map<System::String^,int> pobierzMapeObiektow();
   void Klient::symulatorStart();	   
   void Klient::symulatorReset();	   
   void Klient::symulatorStop();
   void Klient::ustawRegulator(System::String^ nazwa);
   void Klient::dodajWartZad(System::String^ nazwa);
   void Klient::ustawObiekt(System::String^ nazwa);
	   
   private:

   void odbieranie();
   void nowaRamka(Ramka);
   delegate System::Void krokSym_d(double, double, double, double);
   delegate System::Void dodajRegulator_d();   
   delegate System::Void dodajObiekt_d();   
   delegate System::Void dodajListeGeneratorow_d();
   delegate System::Void dodajMapeRegulatorow_d();
   delegate System::Void dodajMapeObiektow_d();
   delegate System::Void dodajMapeGeneratorow_d();
   /*delegate System::Void dodajRegulator_d();   
   delegate System::Void dodajObiekt_d(); */
   boost::asio::io_service *ioService;
   KlientTCP *klient;
   System::Threading::Thread^ watek;
   OknoGlowne^ okno;
   cliext::map<System::String^,System::String^>  konfigRegulatora;
   cliext::map<System::String^,System::String^>  konfigObiektu;
   cliext::vector<System::String^> wektorGeneratorow;

   cliext::map<System::String^,int> mapaRegulatorow;
   cliext::map<System::String^,int> mapaObiektow;
   cliext::map<System::String^,int> mapaGeneratorow;

};

#endif // KLIENT_H
